计算机上运行的程序都会有进程,你可以打开windows的进程管理器来查看系统所有的进程信息,而linux可以使用top或者ps来查看所有的进程信息。
线程是比进程还要细分的一个单元,它在进程里面,一个进程下面可以有多个线程。
下表为进程和线程的主要区别:
项目 | 进程 | 线程 |
---|---|---|
unit | 分配系统资源(cpu时间、内存等)的基本单位 | 进程内的一个执行单元,CPU调度和分派的基本单位 |
地址空间 | 有独立的地址空间 | 和同进程内的其他线程共享地址空间 |
健壮性 | 很健壮,一个进程崩溃对其他进程没有影响 | 不健壮,相同进程内,一个线程崩溃(意味着进程崩溃),其他线程也会崩溃 |
调度(切换) | 进程上下文切换,资源耗费大 | 轻量级进程切换,不用重新加载内存,一个进程内的线程切换要比不同进程内的线程切换快5-50倍 |
创建 | 拷贝父进程的地址空间,耗时较长 | 直接创建,比进程创建要快10-100倍 |
通信 | 进程间通信,用到IPC通信机制(共享内存、socket、信号、管道等) | 可以直接和相同进程内的其他线程通信 |
编程容易 | 多进程间耦合性较小,比较容易 | 线程间耦合度较大,共享全局变量,需要考虑关键变量的互斥操作 |